from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.orm import mapper
from database import metadata, db_session, init_db, engine
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from usuario import Usuario, usuario
from estadoSC import EstadoSC, estadosc
from item import Item, item
from comite import Comite, comite

class SolicitudCambio(object):
    """ Clase que define el modelo de la tabla solicitud de cambio"""
    
    query = db_session.query_property()

    def __init__(self, codigo=None, fecha=None, observacion=None, votos_a_favor=None, votos_en_contra=None):
        """ Metodo init """
        self.fecha = fecha
        self.codigo = codigo
        self.observacion = observacion
        self.votos_a_favor = votos_a_favor
        self.votos_en_contra = votos_en_contra

    def __repr__(self):
        return self.observacion

solicitud = Table('solicitud', metadata,
    Column('idsolicitud', Integer, primary_key=True),
    Column('codigo', String(20)),
    Column('fecha', String(50)),
    Column('observacion', String(250)),
    Column('idcomite', Integer, ForeignKey('comite.idcomite')),
    Column('idestadosc', Integer, ForeignKey('estadosc.idestadosc')),
    Column('idusuario', Integer, ForeignKey('usuario.idusuario')),
    Column('votos_a_favor', Integer),
    Column('votos_en_contra', Integer)
)

association_table_solicitud = Table('itemsPorSolicitud', metadata,
    Column('idsolicitud', Integer, ForeignKey('solicitud.idsolicitud')),
    Column('iditem', Integer, ForeignKey('item.iditem'))
)

mapper(SolicitudCambio, solicitud, properties={
    'estadosc' : relationship(EstadoSC, backref='solicitudes'),
    'comite' : relationship(Comite, backref='solicitudes'),
    'items' : relationship(Item, secondary=association_table_solicitud, backref='solicitudes'),
    'usuario' : relationship(Usuario, backref='solicitudes')
})
